package persi.futbol.partidos;

import persi.futbol.Equipo;
import persi.hibernate.exception.FutbolRuntimeException;

public class PartidoCopa extends Partido {

	private PartidoSimple partido1;
	private PartidoSimple partido2;

	private Integer golesPenalEquipo1 = 0;
	private Integer golesPenalEquipo2 = 0;

	public PartidoCopa() {
	}

	public PartidoCopa(final PartidoSimple partido1,
			final PartidoSimple partido2) {
		super(partido1.getEquipo1(), partido1.getEquipo2());
		this.partido1 = partido1;
		this.partido2 = partido2;
	}

	@Override
	public Equipo getGanador() {
		final int goles1 = partido1.getGolesEquipo1()
				+ partido2.getGolesEquipo1();
		final int goles2 = partido1.getGolesEquipo2()
				+ partido2.getGolesEquipo2();

		if (goles1 == goles2) {
			if (this.getGolesPenalEquipo1() == null
					|| this.getGolesPenalEquipo2() == null)
				throw new FutbolRuntimeException(
						"El partido esta empatado y uno de los equipos no tiene cargado los goles de penal");
			final boolean goleadorEquipo1 = this.getGolesPenalEquipo1() > this
					.getGolesPenalEquipo2();
			return goleadorEquipo1 ? this.getEquipo1() : this.getEquipo2();
		}
		final boolean ganadorEquipo1 = goles1 > goles2;
		return ganadorEquipo1 ? this.getEquipo1() : this.getEquipo2();
	}

	public Integer getGolesPenalEquipo1() {
		return golesPenalEquipo1;
	}

	public Integer getGolesPenalEquipo2() {
		return golesPenalEquipo2;
	}

	public PartidoSimple getPartido1() {
		return partido1;
	}

	public PartidoSimple getPartido2() {
		return partido2;
	}

	public void setGolesPenalEquipo1(final Integer golesPenalEquipo1) {
		this.golesPenalEquipo1 = golesPenalEquipo1;
	}

	public void setGolesPenalEquipo2(final Integer golesPenalEquipo2) {
		this.golesPenalEquipo2 = golesPenalEquipo2;
	}

	public void setPartido1(final PartidoSimple partido1) {
		this.partido1 = partido1;
	}

	public void setPartido2(final PartidoSimple partido2) {
		this.partido2 = partido2;
	}

}
